﻿#define _CRT_SECURE_NO_WARNINGS
//练习1 
//struct S1
//{
//	char c1;
//	int i;
//	char c2;
//};
//int printf("%d\n", sizeof(struct S1));
////练习2 
//struct S2
//{
//	char c1;
//	char c2;
//	int i;
//};
//printf("%d\n", sizeof(struct S2));
////练习3 
//struct S3
//{
//	double d;
//	char c;
//	int i;
//};
//printf("%d\n", sizeof(struct S3));
////练习4-结构体嵌套问题 
//struct S4
//{
//	char c1;
//	struct S3 s3;
//	double d;
//};
//printf("%d\n", sizeof(struct S4));
//那在设计结构体的时候，我们既要满⾜对⻬，⼜要节省空间，如何做到：
//让占⽤空间⼩的成员尽量集中在⼀起
//例如： 
//struct S1
//{
//	char c1;
//	int i;
//	char c2;
//};
//struct S2
//{
//	char c1;
//	char c2;
//	int i;
//};
//#include <stdio.h>
//#pragma pack(1)//设置默认对⻬数为1 
//struct S
//{
//	char c1;
//	int i;
//	char c2;
//};
//#pragma pack()//取消设置的对⻬数，还原为默认 
//int main()
//{
//	//输出的结果是什么？ 
//	printf("%zd\n", sizeof(struct S));
//	return 0;
//}
////⼀个例⼦ 
//struct S
//{
//	char a : 3;
//	char b : 4;
//	char c : 5;
//	char d : 4;
//};
//int main()
//{
//	struct S s = { 0 };
//	s.a = 10;
//	s.b = 12;
//	s.c = 3;
//	s.d = 4;
//}
////空间是如何开辟的？ 
//代码1 
#include <stdio.h>
//联合类型的声明 
//union Un
//{
//	char c;
//	int i;
//};
//int main()
//{
//	//联合变量的定义 
//	union Un un = { 0 };
//	// 下⾯输出的结果是⼀样的吗？ 
//	printf("%p\n", &(un.i));
//	printf("%p\n", &(un.c));
//	printf("%p\n", &un);
//	return 0;
//}
//代码2 
#include <stdio.h>
//联合类型的声明 
//union Un
//{
//	char c;
//	int i;
//};
//int main()
//{
//	//联合变量的定义 
//	union Un un = { 0 };
//	un.i = 0x11223344;
//	un.c = 0x55;
//	printf("%x\n", un.i);
//	return 0;
//}
//#include <stdio.h>
//union Un1
//{
//	char c[5];
//	int i;
//};
//union Un2
//{
//	short c[7];
//	int i;
//};
//int main()
//{
//	//下⾯输出的结果是什么？ 
//	printf("%d\n", sizeof(union Un1));
//	printf("%d\n", sizeof(union Un2));
//	return 0;
//}
// 
//struct gift_list
//{
//	int stock_number;//库存量 
//	double price; //定价 
//	int item_type;//商品类型 
//
//	union {
//		struct
//		{
//			char title[20];//书名 
//			char author[20];//作者 
//			int num_pages;//⻚数 
//		}book;
//		struct
//		{
//			char design[30];//设计 
//		}mug;
//		struct
//		{
//			char design[30];//设计 
//			int colors;//颜⾊ 
//			int sizes;//尺⼨ 
//		}shirt;
//	}item;
//};
//int main()
//{
//	struct gift_list gl;
//	return 0;
//}
//int check_sys()
//{
//	union
//	{
//		int i;
//		char c;
//	}un;
//	un.i = 1;
//	return un.c;//返回1是⼩端，返回0是⼤端 
//}
//#include <stdio.h>
//
//int main()
//{
//	char a = -1;
//	//-1---->>10000000000000000000000000000001
//	// 11111111111111111111111111111110
//	// 11111111111111111111111111111111
//	//11111111-----a
//	signed char b = -1;
//	//11111111------b
//	unsigned char c = -1;
//	//11111111-------c
//	printf("a=%d,b=%d,c=%d", a, b, c);
//	return 0;
//}
#include <stdio.h>
#include <string.h>
int my_atoi(const char* ps)
{
	int result = 0;
	int sign = 1;
	while (*ps == ' ')
	{
		ps++;
	}
	if (*ps == '-')
	{
		sign = -1;
		ps++;
	}
	else if (*ps == '+')
	{
		ps++;
	}
	while (*ps >= '0' && *ps <= '9')
	{
		result = result * 10 + (*ps - '0');
		ps++;
	}
	return sign * result;
}
int main()
{
	int i;
	char arr[256];
	printf("Enter a number:");
	fgets(arr, 256, stdin);
	i = my_atoi(arr);
	printf("The value entered is %d.Its double is %d.\n", i, i * 2);
	return 0;
}